5 - Ein- und Ausgabe [ID:15678]
50 von 113 angezeigt

In diesem Abschnitt der Übung wollen wir euch erklären, wie ihr in eurem Prozehprogramm

Ein- und Ausgabe tätigen könnt.

Für Ein- und Ausgabe werden euch von der C-Bibliothek folgende Funktionen vorgegeben.

Auf der einen Seite haben wir die Funktion fgets, mit der man ganze Zeilen einlesen kann.

Dabei sieht die Signatur von fgets vor, dass man einen Buffer übergibt als erstes Argument,

in diesem Fall der CharacterPointerS, gefolgt von der Länge, d.h. der Anzahl an Bites, die

in diesem Buffer Platz finden.

Schließlich als letztes Argument soll noch ein FileStream übergeben werden, der anzeigt,

von welchem Stream gelesen werden soll.

Wenn man von der Standard-Eingabe lesen möchte, gibt es bereits vordefiniert den Stream stdin,

den man hier übergeben kann.

Der Rückgabewert ist im Volksfall der FGETS-Funktion ein Zeiger auf den Eingabepuffer.

Für alle anderen Fälle ist der Null.

Die anderen Fälle können beinhalten, dass entweder ein Fehler aufgetreten ist oder eben,

dass das Ende der Datei erreicht wurde, die eingelesen werden soll.

Für den Fall, dass ein Fehler aufgetreten ist, wird zusätzlich zu dem Rückgabewert

Null noch die Erno gesetzt.

FGETS liest eine ganze Zeile ein.

Dabei ist aber zu beachten, dass falls die Zeile länger ist als der übergebene Buffer,

die Zeile eben nur bis N-1 Zeichen eingelesen wurde.

Das bedeutet, der Rest müsste in einem weiteren Aufruf der FGETS-Funktion eingelesen werden.

An der Stelle ist es wichtig, dass nur N-1 Zeichen in den Buffer geschrieben werden durch

die FGETS-Funktion, weil anschließend das terminierende Null-Byte kommt.

Damit wird das String abgeschlossen.

Sollte die Zeile jedoch komplett in den Buffer passen, wird FGETS aber auch das Zeilenende,

das Backslash-N, mit in den Buffer schreiben.

Möchte man nun nicht etwas einlesen, sondern etwas auf dem Bildschirm darstellen, gibt

es die FPUTS-Funktion.

Mit FPUTS kann eine ganze Zeile auf dem Bildschirm ausgegeben werden.

Wobei FPUTS an dieser Stelle implizit eine neue Zeile schreiben wird, das heißt der Eingabestring,

der als erstes Argument übergeben wird, muss kein Backslash-N enthalten.

Als zweites Argument wird der Ausgabestream angegeben.

Für den Fall, dass man auf dem Standard-Ausgabe-Kanal schreiben möchte, kann man hierbei auf STD

OUT zurückgreifen oder, falls man eine Fehle-Ausgabe tätigen möchte, kann man hier auch auf STDR

ausgeben.

Der Rückgabewert der FPUTS-Funktion ist hierbei die Anzahl der geschriebenen Zeichen.

Sollte ein Fehler aufgetreten sein, gibt die FPUTS-Funktion auch EOF zurück.

Soweit zur grundlegenden Benutzung der beiden Funktionen, mit der Ein- und Ausgabe getätigt

werden kann.

Die spannende Frage ist jetzt, wie wir korrekt Fehler behandeln können, insbesondere bei

der FGETS-Funktion, die den Rückgabewerten NULL doppelt belegt, einmal um ein Fehler

anzuzeigen und wieder einmal um zum Ausdruck zu bringen, dass die Eingabe zu Ende ist.

An dieser Stelle müssen wir auf weitere Hilfsfunktionen zurückgreifen.

Zum Beispiel können wir zu einem Dateistrom mit der Funktion FERROR abfragen, ob denn

ein Fehler aufgetreten ist beim Ein- oder Auslesen des Stroms.

Auf dieselbe Art und Weise können wir auch die Funktion FEOF verwenden, um zu prüfen,

ob das Ende der Datei erreicht wurde.

Um also zu prüfen, ob der Aufruf von FGETS erfolgreich war, muss man einmal den Rückgabewert

prüfen.

Und wenn dieser NULL ist, müssen wir entweder mit der Funktion FERROR prüfen, ob ein Fehler

Teil einer Videoserie :
Teil eines Kapitels:
Sortieren und Fehlerbehandlung

Zugänglich über

Offener Zugang

Dauer

00:07:27 Min

Aufnahmedatum

2020-05-13

Hochgeladen am

2020-05-13 09:26:28

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen